﻿#pragma once

#include <learn/ais/ais_auxiliary_point.h>
#include <learn/ais/ais_curve.h>

namespace xi
{

namespace ais
{

class EXT_SYMBOL AIS_AuxiliaryCurve : public AIS_Curve
{
  public:
    AIS_AuxiliaryCurve(AIS_AuxiliaryCurve &&) = delete;

    /**
     * @brief 辅助曲线是由一组辅助点组成的曲线
     *
     */
    explicit AIS_AuxiliaryCurve();

    /**
     * @brief 添加辅助点
     *
     * @param[in] point
     */
    void add_point(std::shared_ptr<AIS_AuxiliaryPoint> point);

    /**
     * @brief 曲线采样
     *
     * @param[in] num
     * @return std::vector<Vec3f>
     */
    std::vector<Vec3f> sample(std::size_t num) const override;

    /**
     * @brief 鼠标消息
     *
     * @param[in] msg
     */
    void visit(AIS_MouseMsg *msg) override;

  protected:
    std::vector<std::shared_ptr<AIS_AuxiliaryPoint>> m_points;
};

} // namespace ais

} // namespace xi
